Arduino 是專為快速原型(Rapid Prototyping)開發而生的開源 嵌入式系統(Embedded Systems) 平台,能幫助我們快速達成概念驗證(PoC)。
在程式語言支援方面,官方主要採用與 C/C++ 相仿的主流語法(後續文章若有提及將統稱Arduino C);如果你偏好 Python,官方也推出了實驗性專案Arduino Lab for MicroPython——這是一款獨立於 Arduino IDE 2.x 的輕量級編輯器,支援開發板連接、程式碼上傳、檔案傳輸,並提供互動式 REPL 介面。
以下我們先介紹Arduino C的主要架構
當開啟Arduino IDE會看到以下畫面,依照Arduino官方稱為Sketch。
裡面有setup()與loop()函數,以下分別介紹兩者的用途:
具備 C 家族語言背景的您,第一次使用 Arduino 時是否也曾好奇:main() 入口點(Entry Point)到底藏在哪裡?
其實 Arduino 依然遵循標準 C/C++ 規範,只是將 main() 封裝在底層庫中。它的定義位於 cores/arduino/main.cpp。
在 Windows 系統中該檔案的絕對路徑為: C:\Users\<使用者名稱>\AppData\Local\Arduino15\packages\<平台安裝package名稱>\hardware\<硬體名稱>\<硬體版本>\cores\arduino\main.cpp
上述 setup() 與 loop() 的程式結構,在嵌入式系統中稱為裸機(Bare Metal)開發。這種架構主要依賴「無限迴圈 + 中斷服務常式(ISR)」運作,非常適合邏輯單純、資源有限的輕量級設備。然而,當專案複雜度提升、需要同時處理多項即時工作時,開發者通常會導入具備核心(Kernel) 的 即時作業系統(Real-Time operating system, RTOS),透過任務(Task)調度與優先級分配,實現更高效的多任務管理。
除了技術架構的演進,另一個核心重點是角色的切換——從這裡開始,我們將正式從使用者(User)轉變為開發者(Developer)。
如下圖所示,開發者主導的是整個系統的核心「處理(Process)」環節: